using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;

namespace TodoApi.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TodoController : ControllerBase
    {
        private static List<TodoItem> Todos = new List<TodoItem>
        {
            new TodoItem { Id = 1, Task = "Learn C#", IsCompleted = false },
            new TodoItem { Id = 2, Task = "Build a Web API", IsCompleted = false }
        };

        // GET: api/todo
        [HttpGet]
        public IActionResult Get()
        {
            return Ok(Todos);
        }

        // GET: api/todo/5
        [HttpGet("{id}")]
        public IActionResult Get(int id)
        {
            var todo = Todos.FirstOrDefault(t => t.Id == id);
            if (todo == null)
            {
                return NotFound();
            }
            return Ok(todo);
        }

        // POST: api/todo
        [HttpPost]
        public IActionResult Post([FromBody] TodoItem todo)
        {
            todo.Id = Todos.Max(t => t.Id) + 1;
            Todos.Add(todo);
            return CreatedAtAction(nameof(Get), new { id = todo.Id }, todo);
        }

        // PUT: api/todo/5
        [HttpPut("{id}")]
        public IActionResult Put(int id, [FromBody] TodoItem todo)
        {
            var existingTodo = Todos.FirstOrDefault(t => t.Id == id);
            if (existingTodo == null)
            {
                return NotFound();
            }

            existingTodo.Task = todo.Task;
            existingTodo.IsCompleted = todo.IsCompleted;
            return NoContent();
        }

        // DELETE: api/todo/5
        [HttpDelete("{id}")]
        public IActionResult Delete(int id)
        {
            var todo = Todos.FirstOrDefault(t => t.Id == id);
            if (todo == null)
            {
                return NotFound();
            }

            Todos.Remove(todo);
            return NoContent();
        }
    }

    public class TodoItem
    {
        public int Id { get; set; }
        public string Task { get; set; }
        public bool IsCompleted { get; set; }
    }
}
